package com.gl.glcourses.model{

	import com.gl.glcourses.events.GLCoursesEvent;
	import com.gl.glcourses.model.constants.Constants;
	import com.gl.glcourses.vos.*;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.managers.CursorManager;
	

	public class EdicionCursoPanelModel extends PresentationModel{

		[Bindable]
		public var horaCalculada:String;
		
		public function set curso(value:Object):void
		{
			this.cursoSeleccionado = value as Curso;
			this.minutosRestantes = (value as Curso).cantidadMinutosTotal;
			var horas:Array = (minutosRestantes/60).toString().split(".");
			var minutosFinal:Number = minutosRestantes%60;
			horaCalculada = horas[0].toString() +"hs "+ minutosFinal.toString()+"min";		
		}
		
		[Bindable]
		public var placeState:String = "SelectPlace";
		
		[Bindable]
		public var cursoSeleccionado:Curso;
		
		[Bindable]
		public var minutosRestantes:Number;
		
		[Bindable]
		public var edicionCurso:EdicionCurso = new EdicionCurso();

		[Bindable]
		public var oficinas:ArrayCollection = new ArrayCollection();

		[Bindable]
		public var oficinasSeleccionadas:Array = new Array();

		[Bindable]
		public var lugares:ArrayCollection = new ArrayCollection();		

		[Bindable]
		public var sesionCurso:SesionEdicionCurso = new SesionEdicionCurso();

		[Bindable]
		public var fechaSesionSeleccionado:Date = fechaHoy();
		
		[Bindable]
		public var horaSesionSeleccionado:Number = 0;
		
		[Bindable]
		public var minutoSesionSeleccionado:Number = 0;
		
		[Bindable]	
		public var cantidadHoraSesionSeleccionado:Number = 0;
		
		[Bindable]		
		public var cantidadMinutoSesionSeleccionado:Number = 0;
		
		[Bindable]
		public var lugarSesionSeleccionado:Lugar;
		
		[Bindable]
		public var cupos:Number = 0;
		
		[Bindable]
		public var scroll:Number = 0;
		
		
		//LISTADO DE USUARIOS Y PARTICIPANTES INVITADOS
		[Bindable]
		public var usuarios:ArrayCollection = new ArrayCollection();
		
		[Bindable]
		public var participantesSeleccionados:ArrayCollection = new ArrayCollection();
		
		[Bindable]
		public var responsablesSeleccionados:ArrayCollection = new ArrayCollection();
		
		[Bindable]
		public var docentesSeleccionados:ArrayCollection = new ArrayCollection();
		
		[Bindable]
		public var usuariosInvitadosSeleccionados:ArrayCollection = new ArrayCollection();
		
		
		//COMBOBOX DE SELECCION DE PARTICIPANTES
		[Bindable]
		public var usuarioSeleccionado:Usuario;
		
		[Bindable]
		public var responsableSeleccionado:Usuario;
		
		[Bindable]
		public var docenteSeleccionado:Usuario;
		
		[Bindable]
		public var usuarioInvitadoSeleccionado:Usuario;
		
		[Bindable]
		public var tipoParticipanteSeleccionado:String;
		
		[Bindable]
		public var lugarNuevo:String;
		
		[Bindable]
		public var cursoAgendado:EdicionCurso;
		
		[Bindable]
		public var isCursoAbierto:Boolean = true;
		
		public var tiposParticipante:ArrayCollection = new ArrayCollection();
		
		public function limpiarSegunConfirmacion( confirmacion:Confirmacion ):void {
			
			if( confirmacion.estado == Constants.CONFIRMACION_OK )
			{				
				limpiar();
			}
		}
		
		public function altaLugar():void
		{
			var lugar:Lugar = new Lugar();
			lugar.descripcion =  this.lugarNuevo;
			
			var event:GLCoursesEvent = new GLCoursesEvent( GLCoursesEvent.ALTA_LUGAR );
			event.lugar = lugar;
			dispatch(event);			
		}
		
		public function agregarResponsable(responsableSeleccionado:Usuario):void
		{
			var participante:Participante = new Participante();
			participante.usuario = responsableSeleccionado;
			
			participante.tipoParticipante = "RRHH";
			
			participante.edicionCurso = edicionCurso;
			responsablesSeleccionados.addItem(participante);
		}
		
		public function agregarDocente(docenteSeleccionado:Usuario):void
		{
			var participante:Participante = new Participante();
			participante.usuario = docenteSeleccionado;
			
			participante.tipoParticipante = "DOCENTE";
			
			participante.edicionCurso = edicionCurso;
			docentesSeleccionados.addItem(participante);
		}
		
		public function agregarUsuarioInvitado(usuarioInvitadoSeleccionado:Usuario):void
		{
			var participante:Participante = new Participante();
			participante.usuario = usuarioInvitadoSeleccionado;
			
			participante.tipoParticipante = "ALUMNO";
			
			participante.edicionCurso = edicionCurso;
			usuariosInvitadosSeleccionados.addItem(participante);
		}

		
		public function finEdicionCurso(publicar:Boolean):void
		{
			CursorManager.setBusyCursor();
			if(!validar())
			{
				CursorManager.removeBusyCursor();
				return;
			}
			
			var event:GLCoursesEvent = new GLCoursesEvent( GLCoursesEvent.CREAR_EDICIONCURSO );
			event.edicionCurso = edicionCurso;
			
			if(publicar)
			{
				event.edicionCurso.estadoEdicionCurso = EstadoEdicionCurso.PUBLICADO;	
			}
			else
			{
				event.edicionCurso.estadoEdicionCurso = EstadoEdicionCurso.NO_PUBLICADO;
			}
			
			event.edicionCurso.curso = cursoSeleccionado;
			
			this.participantesSeleccionados.addAll(docentesSeleccionados);
			this.participantesSeleccionados.addAll(responsablesSeleccionados);
			this.participantesSeleccionados.addAll(usuariosInvitadosSeleccionados);
			
			/*event.edicionCurso.cupos = this.cupos;*/
			event.edicionCurso.participantes = this.participantesSeleccionados as ArrayCollection;
			event.cursoAbierto = this.isCursoAbierto;
			
			/*if(event.edicionCurso.cupos < event.edicionCurso.participantes.length)
			{
				Alert.show("Cupo insuficiente");
				return;
			}*/
			dispatch(event);
		}
		
		public function cancelar(event:Event):void{
			limpiar();
		}
		
		public function agregarSesion(event:MouseEvent):void{
			
			if(cantidadHoraSesionSeleccionado==0)
			{
				if(cantidadMinutoSesionSeleccionado==0)
				{
					Alert.show(Constants.getString( "alert.errorduration" ));
					return;
				}
			}
			if(lugarSesionSeleccionado==null)
			{
				Alert.show(Constants.getString( "alert.errorplace" ));
				return;
			}
			
			//creo la sesion
			sesionCurso = new SesionEdicionCurso();
			sesionCurso.fecha = new Date(fechaSesionSeleccionado.fullYear, fechaSesionSeleccionado.month, fechaSesionSeleccionado.date,
				horaSesionSeleccionado, minutoSesionSeleccionado);
			sesionCurso.cantidadMinutos = (cantidadHoraSesionSeleccionado*60) + cantidadMinutoSesionSeleccionado;
			sesionCurso.lugar = lugarSesionSeleccionado;
			//la agrego a la lista
			if(minutosRestantes < sesionCurso.cantidadMinutos)
			{
				Alert.show(Constants.getString( "alert.timerest" ));
				return;
			}
			minutosRestantes -= sesionCurso.cantidadMinutos;
			//probando
			var horas:Array = (minutosRestantes/60).toString().split(".");
			var minutosFinal:Number = minutosRestantes%60;
			horaCalculada = horas[0].toString() +"hs "+ minutosFinal.toString()+"min";
			
			edicionCurso.sesionCurso.addItem(sesionCurso);
			limpiarSesiones();
		}
		
		private function limpiar():void
		{
			oficinasSeleccionadas = new Array();
			this.cupos=0;
			sesionCurso = new SesionEdicionCurso();
			edicionCurso = new EdicionCurso();
			responsablesSeleccionados.removeAll();
			docentesSeleccionados.removeAll();
			usuariosInvitadosSeleccionados.removeAll();
			limpiarSesiones();	
	
		}
		
		private function limpiarSesiones():void
		{
			lugarSesionSeleccionado = null;
			cantidadHoraSesionSeleccionado = 0;
			cantidadMinutoSesionSeleccionado = 0;
			horaSesionSeleccionado = 0;
			minutoSesionSeleccionado = 0;
			fechaSesionSeleccionado = fechaHoy();		
		}
		
		private function fechaHoy():Date{
			var fecha:Date = new Date();
			trace(fecha);
			return fecha;
		}
		
		private function validar():Boolean{ //Constants.getString( "other.completefields" )
			var minutosParciales:Number = 0;
			
			if(this.isCursoAbierto==false){
				if(usuariosInvitadosSeleccionados.length==0){
					Alert.show(Constants.getString("alert.participant"));
					return false;
				}
			}
			
			/*if(this.cupos==0){
				Alert.show("Indique un cupo para el curso");
				return false;
			}*/
				
			if(edicionCurso.oficina.length == 0){
				Alert.show(Constants.getString( "alert.selectoffice" ));
				return false;
			}
			if(edicionCurso.sesionCurso.length == 0){
				Alert.show(Constants.getString( "alert.errorsesion" ));
				return false;
			}
			for each (var sesion:SesionEdicionCurso in edicionCurso.sesionCurso){
				if(sesion.lugar == null){
					Alert.show(Constants.getString( "alert.errorsesioncount" ));
					return false;
				}
			}
			for each (var sesionPorTiempo:SesionEdicionCurso in edicionCurso.sesionCurso){
				minutosParciales += sesionPorTiempo.cantidadMinutos;
			}
			if(minutosParciales != edicionCurso.curso.cantidadMinutosTotal){
				Alert.show(Constants.getString( "alert.courseduration" ));
				return false;
			}
			return true;
		}
	}
}